home *** CD-ROM | disk | FTP | other *** search
/ Network CD 2 / Network CD - Volume 2.iso / programs / internet / tcp / amitcp / amitcp-src-22.lha / AmiTCP-2.2 / src / appl / napsaterm / national.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-11-18  |  3.1 KB  |  139 lines

  1. /* $Id: national.c,v 1.5 1993/11/19 02:11:10 ppessi Exp $
  2.  * 
  3.  * national.c --- handle national fonts and keyboard layouts
  4.  *
  5.  * Author: ppessi <Pekka.Pessi@hut.fi>
  6.  *
  7.  * Copyright (c) 1993 Pekka Pessi
  8.  *
  9.  * Created      : Mon Mar 29 06:32:31 1993 ppessi
  10.  * Last modified: Fri Nov 19 04:08:36 1993 ppessi
  11.  *
  12.  */
  13.  
  14. #include <string.h>
  15. #include <ctype.h>
  16.  
  17. #include "nifty.h"
  18. #include "amiga.h"
  19. #include "national.h"
  20.  
  21. #define CHARSETSIZE 256
  22.  
  23. struct KeyMap *myKeyMap = NULL;
  24.  
  25. unsigned char national_table[CHARSETSIZE];
  26. unsigned char national_kmap[CHARSETSIZE];
  27.  
  28. struct nation nations[MAX_NATIONS] = 
  29.   { "ASCII", "usa1", NULL, NULL },
  30.   { "Danish", "dk", NULL, 
  31.       /* Danish I [Æ]Å\Ø{æ}å|ø */  
  32.       "[\306]\305\\\330{\346}\345|\370" }, 
  33.   { "Finnish", "s", NULL, 
  34.       /* [Ä]Å\Ö{ä}å|ö */  
  35.       "[\304]\305\\\326{\344}\345|\366" }, 
  36.   { "French", "f", NULL, 
  37.       /* @à[°\ç]§{é|ù}è~¨ */  
  38.       "@\340[\227\\\337]\305{\351|\371}\350~\250" }, 
  39.   { "German", "d", NULL,
  40.       /* @§[Ä]Ü\Ö{ä}ü|ö~ß */
  41.       "@\247[\304]\334\\\326{\344}\374|\366~\337" },
  42.   { "Norwegian", "n", NULL, 
  43.       /* $¤@É[Æ]Å\Ø^Ü`é{æ}å|ø~ü */
  44.       "$\244@\311[\306]\305\\\330^\334`\351{\346}\345|\370~\374" },
  45.   { "Swedish", "s", NULL, 
  46.       /* $¤@É[Ä]Å\Ö^Ü`é{ä}å|ö~ü */
  47.       "$\244@\311[\304]\305\\\326^\334`\351{\344}\345|\366~\374" },
  48.   { "UK", "gb", NULL,
  49.       /* british #£*/ 
  50.       "#\243" }
  51. }; /* ASCII */
  52.  
  53. struct nation *used_nation = NULL;
  54. short no_nation = 7;
  55.  
  56. unsigned char *kmap_template =
  57. "\000\001\002\003\004\005\006\007"
  58. "\010\011\012\013\014\015\016\017"
  59. "\020\021\022\023\024\025\026\027"
  60. "\030\031\032\033\034\035\036\037"
  61. " !c#$Y|#@ca\"--r-o+23'uP.,1o\"   ?"
  62. "AAAAAAACEEEEIIIIDNOOOOO*OUUUUYTs"
  63. "aaaaaaaceeeeiiiidnooooo/ouuuuyty";
  64.  
  65. /*
  66.  * initialize current mapping
  67.  */
  68. void
  69. init_national(unsigned int n)
  70. {
  71.   int i;
  72.   const unsigned char *patch;
  73.  
  74.   if (n >= no_nation)
  75.     return;
  76.  
  77.   if (used_nation == nations + n)
  78.     return;
  79.  
  80.   used_nation = nations + n;
  81.  
  82.   for (i = 0; i < CHARSETSIZE; i++) {
  83.     national_kmap[i] = national_table[i] = i;
  84.   }
  85.  
  86.   /* Set the keymap */
  87.   if (used_nation->n_kmap) 
  88.     myKeyMap = used_nation->n_kmap;
  89.   else if (used_nation->n_kmapname)
  90.     myKeyMap = used_nation->n_kmap = FindKeyMap(used_nation->n_kmapname);
  91.  
  92.   /* patch send & receive tables */
  93.   memcpy(national_kmap + 128, kmap_template, 128);
  94.   for (patch = used_nation->n_patches; patch && *patch; patch += 2) {
  95.     national_kmap[patch[1]] = patch[0];
  96.     national_table[patch[0]] = patch[1];
  97.   }
  98. }
  99.  
  100. /*
  101.  * Set the nation by name 
  102.  */
  103. void
  104. setnationbyname(char *name)
  105. {
  106.   int i = no_nation - 1;
  107.   while(i >= 0) { 
  108.     if (!Stricmp(nations[i].n_name, name)) {
  109.       init_national(i);
  110.       return;
  111.     }
  112.     i--;
  113.   }
  114.   if (i < 0)
  115.     puts("National code not found");
  116. }
  117.  
  118. /*
  119.  * Parse national resources
  120.  */
  121. void
  122. natinit(void)
  123. {
  124.   char *temp;
  125.  
  126.   if ((temp = getprofile(PROGNAME ".nation")) != NULL) {
  127.     setnationbyname(temp);
  128.   } else {
  129.     init_national(0);
  130.   }
  131.  
  132.  if ((temp = getprofile(PROGNAME ".keymap")) != NULL ||
  133.      (temp = getprofile(PROGNAME ".keyboard")) != NULL) {
  134.     used_nation->n_kmapname = temp;
  135.     used_nation->n_kmap = myKeyMap = FindKeyMap(temp);
  136.   }
  137. }
  138.